package br.com.android.financas.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import android.graphics.Color;
import br.com.android.financas.helper.FieldName;

import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable
public class Receita extends EntidadeAbstrata implements Apresentavel{

	private static final long serialVersionUID = 1073694295692104395L;

	public Receita() {
	}


	@DatabaseField(generatedId = true)
	private Integer id;


	@DatabaseField(canBeNull=true,foreign=true,foreignAutoRefresh=true,foreignAutoCreate=true)
	private Receita pai;

	@DatabaseField(canBeNull=false,dataType=DataType.DOUBLE)
	@FieldName(fieldName="campoValor")
	private double valor;

	@DatabaseField(canBeNull=true)
	@FieldName(fieldName="campoDescricao")
	private String descricao;

	@DatabaseField(canBeNull=false,dataType=DataType.DATE_LONG)
	@FieldName(fieldName="campoData")
	private Date data=new Date();


	@ForeignCollectionField(eager=false)
	private ForeignCollection<Receita> filhos;

	public Serializable getId() {
		return id;
	}


	public double getValor() {
		return valor;
	}

	public void setValor(double valor) {
		this.valor = valor;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	@Override
	public int getCor() {
		return Color.WHITE;
	}

	public Receita getPai() {
		return pai;
	}
	public void setPai(Receita pai) {
		this.pai = pai;
	}

	public ForeignCollection<Receita> getFilhos() {
		return filhos;
	}
	public void setFilhos(ForeignCollection<Receita> filhos) {
		this.filhos = filhos;
	}

	public boolean isPai(){
		return pai==null && getFilhos().size()>0;
	}

	public Receita getUltimoFilho(){
		List<Receita> filhos;
		if(isPai())
			filhos= new ArrayList<Receita>(getFilhos());
		else
			filhos= new ArrayList<Receita>(getPai().getFilhos());

		return filhos.get(filhos.size()-1);
	}

	@Override
	public int compareTo(Apresentavel another) {
		if(getData().before(another.getData()))
			return -1;
		else
			if(getData().equals(another.getData()))
				return 0;
			else
				return 1;
	}
}
